package treehou.se.habit.ui.widgets.factories; import android.media.MediaPlayer; import android.net.Uri; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.MediaController; import android.widget.VideoView; import se.treehou.ng.ohcommunicator.connector.models.OHLinkedPage; import se.treehou.ng.ohcommunicator.connector.models.OHWidget; import treehou.se.habit.R; import treehou.se.habit.ui.widgets.WidgetFactory; public class VideoWidgetFactory implements IWidgetFactory { @Override public WidgetFactory.IWidgetHolder build(WidgetFactory widgetFactory, OHLinkedPage page, final OHWidget widget, final OHWidget parent) { return new VideoWidgetHolder(widget, parent, widgetFactory); } public static class VideoWidgetHolder implements WidgetFactory.IWidgetHolder { private static final String TAG = "VideoWidgetHolder"; private BaseWidgetFactory.BaseWidgetHolder baseHolder; private WidgetFactory factory; private View itemView; private VideoView mVideoView; private OHWidget widget; public VideoWidgetHolder(OHWidget widget, OHWidget parent, WidgetFactory factory) { this.factory = factory; itemView = factory.getInflater().inflate(R.layout.item_widget_video, null); mVideoView = (VideoView) itemView.findViewById(R.id.vidView); baseHolder = new BaseWidgetFactory.BaseWidgetHolder.Builder(factory) .setWidget(widget) .setParent(parent) .setShowLabel(false) .build(); baseHolder.getSubView().addView(itemView); update(widget); } @Override public void update(final OHWidget widget) { Log.d(TAG, "update " + widget); if (widget == null) { return; } if(this.widget == null || !this.widget.getUrl().equals(widget.getUrl())){ setVideoUri(widget.getUrl()); launchVideo(); } this.widget = widget; baseHolder.update(widget); } @Override public View getView() { return baseHolder.getView(); } private void setVideoUri(String uri) { if(!TextUtils.isEmpty(uri)){ mVideoView.setVideoURI(Uri.parse(uri)); } } private void launchVideo(){ //Initializing the video player’s media controller. MediaController controller = new MediaController(factory.getContext()); mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { Log.d(TAG, "Load video widget on prepare"); mVideoView.getLayoutParams().height = (int)(((float) mp.getVideoWidth())/mp.getVideoHeight()) * mVideoView.getLayoutParams().width; mVideoView.requestLayout(); } }); //OHBindingWrapper media controller with VideoView mVideoView.setMediaController(controller); } } }